import java.util.Vector;

//****************************************************************
// Autor:   Eddy Omar Castro Jauregui - 11032
// Seccion: 10
// Nombre del Archivo: VectorStack.java
// Fecha de Modificacion:16/07/2012
// Descripcion:
// Implemetacion de Stack.java por medio de vectores
// ***************************************************************


public class VectorStack<E> implements Stack<E>
{

    
    protected Vector<E> data;

     /** 
     * @descripcion: constructor de la clase
     * @nombre: VectorStack()
     * @parametro: 
     * @retorno: 
     * @pre-condiciones:
     * @post-condiciones:
     */
    public VectorStack()
	{
		data = new Vector<E>();
	}

    
     /** 
     * @descripcion: ingresa un elemento a la pila
     * @nombre: push()
     * @parametro: item
     * @retorno: 
     * @pre-condiciones:
     * @post-condiciones: la pila tiene un nuevo elemento
     */    
    @Override
	public void push(E item)
	{
		data.add(item);
	}
    
    
     /** 
     * @descripcion: extrae un elemento de la pila
     * @nombre: pop()
     * @parametro: 
     * @retorno: item
     * @pre-condiciones: la pila no se encuentra vacia
     * @post-condiciones: la pila tiene un elemento menos
     */  
    @Override
	public E pop()
	{
		return data.remove(size()-1);
	}
    
    
     /** 
     * @descripcion: retorna un elemento a la pila
     * @nombre: peek()
     * @parametro: item
     * @retorno: item
     * @pre-condiciones: la pila no esta vacia
     * @post-condiciones: 
     */  
    @Override
	public E peek()
	{
		return data.get(size() - 1);
	}

    
     /** 
     * @descripcion: retorna el tamaño de la pila
     * @nombre: size()
     * @parametro: 
     * @retorno: tamaño
     * @pre-condiciones:
     * @post-condiciones:
     */      
    @Override
	public int size()
	{
		return data.size();
	}
    
    
     /** 
     * @descripcion: revisa si la pila esta vacia
     * @nombre: empty()
     * @parametro: 
     * @retorno: true:vacia; false: con al menos un elemento
     * @pre-condiciones:
     * @post-condiciones:
     */    
    @Override
	public boolean empty()
	{
		return size() == 0;
	}
}